{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "CS246 - Colab 1.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "toc_visible": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kPt5q27L5557",
        "colab_type": "text"
      },
      "source": [
        "# CS246 - Colab 1\n",
        "## Wordcount in Spark"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "p0-YhEpP_Ds-",
        "colab_type": "text"
      },
      "source": [
        "### Setup"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Zsj5WYpR9QId",
        "colab_type": "text"
      },
      "source": [
        "Let's setup Spark on your Colab environment.  Run the cell below!"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "k-qHai2252mI",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 298
        },
        "outputId": "d08bfdeb-0ee4-48e0-9644-8ab1ee3ba1e6"
      },
      "source": [
        "!pip install pyspark\n",
        "!pip install -U -q PyDrive\n",
        "!apt install openjdk-8-jdk-headless -qq\n",
        "import os\n",
        "os.environ[\"JAVA_HOME\"] = \"/usr/lib/jvm/java-8-openjdk-amd64\""
      ],
      "execution_count": 1,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Collecting pyspark\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/9a/5a/271c416c1c2185b6cb0151b29a91fff6fcaed80173c8584ff6d20e46b465/pyspark-2.4.5.tar.gz (217.8MB)\n",
            "\u001b[K     |████████████████████████████████| 217.8MB 62kB/s \n",
            "\u001b[?25hCollecting py4j==0.10.7\n",
            "\u001b[?25l  Downloading https://files.pythonhosted.org/packages/e3/53/c737818eb9a7dc32a7cd4f1396e787bd94200c3997c72c1dbe028587bd76/py4j-0.10.7-py2.py3-none-any.whl (197kB)\n",
            "\u001b[K     |████████████████████████████████| 204kB 53.8MB/s \n",
            "\u001b[?25hBuilding wheels for collected packages: pyspark\n",
            "  Building wheel for pyspark (setup.py) ... \u001b[?25l\u001b[?25hdone\n",
            "  Created wheel for pyspark: filename=pyspark-2.4.5-py2.py3-none-any.whl size=218257927 sha256=f4fd7f4f872ddec4fd1f4228cbd356843d546fbe2e0c323d2a2dabb3beb68268\n",
            "  Stored in directory: /root/.cache/pip/wheels/bf/db/04/61d66a5939364e756eb1c1be4ec5bdce6e04047fc7929a3c3c\n",
            "Successfully built pyspark\n",
            "Installing collected packages: py4j, pyspark\n",
            "Successfully installed py4j-0.10.7 pyspark-2.4.5\n",
            "openjdk-8-jdk-headless is already the newest version (8u242-b08-0ubuntu3~18.04).\n",
            "0 upgraded, 0 newly installed, 0 to remove and 25 not upgraded.\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "-CJ71AKe91eh",
        "colab_type": "text"
      },
      "source": [
        "Now we authenticate a Google Drive client to download the file we will be processing in our Spark job.\n",
        "\n",
        "**Make sure to follow the interactive instructions.**"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "5K93ABEy9Zlo",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from pydrive.auth import GoogleAuth\n",
        "from pydrive.drive import GoogleDrive\n",
        "from google.colab import auth\n",
        "from oauth2client.client import GoogleCredentials\n",
        "\n",
        "# Authenticate and create the PyDrive client\n",
        "auth.authenticate_user()\n",
        "gauth = GoogleAuth()\n",
        "gauth.credentials = GoogleCredentials.get_application_default()\n",
        "drive = GoogleDrive(gauth)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "0orRvrc1-545",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "id='1SE6k_0YukzGd5wK-E4i6mG83nydlfvSa'\n",
        "downloaded = drive.CreateFile({'id': id})\n",
        "downloaded.GetContentFile('pg100.txt')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qwtlO4_m_LbQ",
        "colab_type": "text"
      },
      "source": [
        "If you executed the cells above, you should be able to see the file *pg100.txt* under the \"Files\" tab on the left panel."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "CRaF2A_j_nC7",
        "colab_type": "text"
      },
      "source": [
        "### Your task"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ebLNUxP0_8x3",
        "colab_type": "text"
      },
      "source": [
        "If you run successfully the setup stage, you are ready to work on the *pg100.txt* file which contains a copy of the complete works of Shakespeare.\n",
        "\n",
        "Write a Spark application which outputs the number of words that start with each letter. This means that for every letter we want to count the total number of (non-unique) words that start with a specific letter. In your implementation **ignore the letter case**, i.e., consider all words as lower case. Also, you can ignore all the words **starting** with a non-alphabetic character."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "xu-e7Ph2_ruG",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "from pyspark.sql import *\n",
        "from pyspark.sql.functions import *\n",
        "from pyspark import SparkContext\n",
        "import pandas as pd\n",
        "\n",
        "# create the Spark Session\n",
        "spark = SparkSession.builder.getOrCreate()\n",
        "\n",
        "# create the Spark Context\n",
        "sc = spark.sparkContext"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AuAxGFPFB43Y",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "# read data\n",
        "rdd = sc.textFile('pg100.txt')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "A-SSxDs9FdJa",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 69
        },
        "outputId": "845dc490-3d84-45a9-ab59-d1387941e94e"
      },
      "source": [
        "rdd.take(3)"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['The Project Gutenberg EBook of The Complete Works of William Shakespeare, by',\n",
              " 'William Shakespeare',\n",
              " '']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 11
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "jtLH4Szuuhvs",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "09bf4dad-1c23-4485-ea58-a72e6088e721"
      },
      "source": [
        "wordRdd = rdd.flatMap(lambda s: s.split())\n",
        "wordRdd.take(3)"
      ],
      "execution_count": 26,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['The', 'Project', 'Gutenberg']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 26
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7jDCs412ZZcF",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "diff = ord('a') - ord('A')"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wxeWNwR_tk0S",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def startCount(char):  # char需要为小写\n",
        "  words = wordRdd.filter(lambda word: word[0] in {char, chr(ord(char) - diff)} if word else False).cache()\n",
        "  return words.count(), words.collect()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YDMObJODtlF6",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "char = 'z'\n",
        "count, words = startCount(char)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9dLBIKbuv9MZ",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "d0c2c7d0-ada1-4804-87cf-adbcba956179"
      },
      "source": [
        "count"
      ],
      "execution_count": 46,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "71"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 46
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "SIrXJyVNP2AI",
        "colab_type": "text"
      },
      "source": [
        "Once you obtained the desired results, **head over to Gradescope and submit your solution for this Colab**!"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "7kzKsu2qwfJF",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 191
        },
        "outputId": "26ca8b9e-f325-4e8d-bab9-fea02e7c6d33"
      },
      "source": [
        "words[:10]"
      ],
      "execution_count": 49,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['zealous',\n",
              " 'zealous',\n",
              " 'zephyrs',\n",
              " 'zone,',\n",
              " 'Zounds,',\n",
              " 'Zounds,',\n",
              " 'zounds,',\n",
              " 'Zounds,',\n",
              " 'Zounds,',\n",
              " 'Zounds,']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 49
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "vi9qqYyJw1cS",
        "colab_type": "text"
      },
      "source": [
        "上面为探索阶段，下面正式计算所有字母开头的计数。"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yrIx6CkRwgCa",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "import pandas as pd"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sEIl2qn5w_Vn",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 206
        },
        "outputId": "2a8a8d3f-2544-43ab-c725-e6953f7c13a4"
      },
      "source": [
        "df = pd.DataFrame()\n",
        "df['Char'] = [chr(i) for i in range(ord('a'), ord('z') + 1)]\n",
        "df.head()"
      ],
      "execution_count": 51,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Char</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>a</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>b</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>c</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>d</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>e</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "  Char\n",
              "0    a\n",
              "1    b\n",
              "2    c\n",
              "3    d\n",
              "4    e"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 51
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sSUD1-GmxJ40",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "def getCount(char):  # char需要为小写\n",
        "  words = wordRdd.filter(lambda word: word[0] in {char, chr(ord(char) - diff)} if word else False)\n",
        "  return words.count()"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "G4QWLSJhxQkV",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        "df['Count'] = df['Char'].apply(getCount)"
      ],
      "execution_count": 0,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pSOKuvPNxXTy",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 865
        },
        "outputId": "0f2bb7f4-4d9f-4b95-8bde-c57d5c67da61"
      },
      "source": [
        "df"
      ],
      "execution_count": 54,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>Char</th>\n",
              "      <th>Count</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>a</td>\n",
              "      <td>84836</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>b</td>\n",
              "      <td>45455</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>c</td>\n",
              "      <td>34567</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>d</td>\n",
              "      <td>29713</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>e</td>\n",
              "      <td>18697</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>f</td>\n",
              "      <td>36814</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>g</td>\n",
              "      <td>20782</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>h</td>\n",
              "      <td>60563</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>i</td>\n",
              "      <td>62167</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>j</td>\n",
              "      <td>3339</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>k</td>\n",
              "      <td>9418</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>l</td>\n",
              "      <td>29569</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>m</td>\n",
              "      <td>55676</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>n</td>\n",
              "      <td>26759</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>14</th>\n",
              "      <td>o</td>\n",
              "      <td>43494</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>15</th>\n",
              "      <td>p</td>\n",
              "      <td>27759</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>16</th>\n",
              "      <td>q</td>\n",
              "      <td>2377</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>17</th>\n",
              "      <td>r</td>\n",
              "      <td>14265</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>18</th>\n",
              "      <td>s</td>\n",
              "      <td>65705</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>19</th>\n",
              "      <td>t</td>\n",
              "      <td>123602</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>20</th>\n",
              "      <td>u</td>\n",
              "      <td>9170</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>21</th>\n",
              "      <td>v</td>\n",
              "      <td>5728</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>22</th>\n",
              "      <td>w</td>\n",
              "      <td>59597</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>23</th>\n",
              "      <td>x</td>\n",
              "      <td>14</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>24</th>\n",
              "      <td>y</td>\n",
              "      <td>25855</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>25</th>\n",
              "      <td>z</td>\n",
              "      <td>71</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "   Char   Count\n",
              "0     a   84836\n",
              "1     b   45455\n",
              "2     c   34567\n",
              "3     d   29713\n",
              "4     e   18697\n",
              "5     f   36814\n",
              "6     g   20782\n",
              "7     h   60563\n",
              "8     i   62167\n",
              "9     j    3339\n",
              "10    k    9418\n",
              "11    l   29569\n",
              "12    m   55676\n",
              "13    n   26759\n",
              "14    o   43494\n",
              "15    p   27759\n",
              "16    q    2377\n",
              "17    r   14265\n",
              "18    s   65705\n",
              "19    t  123602\n",
              "20    u    9170\n",
              "21    v    5728\n",
              "22    w   59597\n",
              "23    x      14\n",
              "24    y   25855\n",
              "25    z      71"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 54
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TUM9T1aMxY78",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 34
        },
        "outputId": "16f835a8-4949-4cb6-c00d-6675c89bcbed"
      },
      "source": [
        "df.Count.sum() / wordRdd.count()"
      ],
      "execution_count": 56,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "0.9910747173033678"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 56
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8Le0J0GRxkLR",
        "colab_type": "code",
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 459
        },
        "outputId": "73ad02d6-7af9-4d07-d355-e471dc9bec39"
      },
      "source": [
        "df.plot(kind='bar', x='Char', y='Count',\n",
        "        figsize=(10, 7), alpha=0.5, color='olive')"
      ],
      "execution_count": 61,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.axes._subplots.AxesSubplot at 0x7f60e122c358>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 61
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\nAAAAAElFTkSuQmCC\n",
            "text/plain": [
              "<Figure size 720x504 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "4EYsyBlVx0z5",
        "colab_type": "code",
        "colab": {}
      },
      "source": [
        ""
      ],
      "execution_count": 0,
      "outputs": []
    }
  ]
}